== Paigo通信协议 ==

Paigo通信协议包括两部分：Linux系统与外界APP（IOS, Andriod等）通信 和 Linux系统与 STM32 板通信。

[[Paigo应用层通信协议]] 是指小车Linux系统与外界APP（IOS, Andriod等）通信的协议规范。

[[Paigo 数据服务器]] 中记录了PAIGO的一些数据。

== Paigo File System ==

[[Paigo File System]] 中规定了Paigo Linux系统的文件规范。

== Paigo Upgrade ==

这里所说的Paigo的升级包括初始出厂阶段的TF卡烧录系统和日常的在线升级两个方面。

* TF卡升级是用将一个专门的TF卡放在卡托上，插在PAIGO的板上，通过TF卡自动烧录的过程。

* 在线升级（OTA）是APP发送网络协议的命令给Paigo, Piago下载升级包升级的过程。

== Paigo功能逻辑 ==

=== 语音聊天（Siri）===

当激光传感器检测的距离小于tap_close_distance达到2秒，开时进入语音聊天功能，同时插放一个‘滴’的声音。

设置启动后，默认是开启状态，在APP连接上来后，APP可以发送指令开启和关闭功能，在APP联接断开后，启用Siri功能。

=== TF烧录卡IMG的构建 ===

:# 通过[http://192.168.8.29/job/aria-paigo-rootfs-REBUILD/ aria-paigo-rootfs-REBUILD]构建paigo rootfs.
:# 通过[http://192.168.8.29/job/aria-paigo-images/ aria-paigo-images]构建paigo rootfs img.
:# 通过[http://192.168.8.29/job/aria-paigo-burn-emmc-images/ aria-paigo-burn-emmc-images]构建paigo tf烧录卡的img.

其中aria-paigo-burn-emmc-images项目的构建不需要手动触发点击，在aria-paigo-images项目构建成功后，会自动触发烧录IMG的构建。

最终的烧录卡有如下的版本供下载：

* http://192.168.8.29:81/aria-paigo-burn-emmc-images/paigo-burn-emmc-new-augie-invertc.sd-latest.img.xz
* http://192.168.8.29:81/aria-paigo-burn-emmc-images/paigo-burn-emmc-new-augie-normal.sd-latest.img.xz
* http://192.168.8.29:81/aria-paigo-burn-emmc-images/paigo-burn-emmc-new-normal.sd-latest.img.xz
* http://192.168.8.29:81/aria-paigo-burn-emmc-images/paigo-burn-emmc-new-invertc.sd-latest.img.xz

=== TF烧录卡制作步骤 ===

  # 插上TF卡
  ls /dev/sd*
  sudo umount /dev/sdb?
  sudo umount /dev/sdb?
  unxz -c paigo-burn-emmc-new-augie-normal.sd-latest.img.xz | sudo dd of=/dev/sdb bs=16M
  sync
  # 拔除TF卡

=== OTA ===

Paigo在收到App发送的升级命令，从给定的URL下载升级包后，进入[http://192.168.8.29/job/aria-paigo-rescuefs/ aria-paigo-rescuefs]系统执行升级OS的过程。

注：aria-paigo-rescuefs项目位于[https://github.com/c2h2/luna-buildroot-2013.08.1/tree/paigo github]

Paigo升级包括ARM Linux OS和STM32两个部分的升级。

[[Paigo Upgrade]] 中详细描述了Paigo升级方式。

== PaiGo硬件 ==

=== 屏幕 === 

配置文件 /boot/uboot/uEnv.txt中的

老屏 optargs=空
新屏的屏幕线是黑色的， optargs=

==小车调试记录==
2016/5/23
===红外遥控实验===
*使用方式：用红外遥控器控制小车前进、后退、左转、右转。
*原理：通过红外NEC协议发送命令给小车，控制小车运动。
*实验现象：
#红外遥控距离：（0~7米控制稳定，8~15M米不稳定，控制成功靠概率）
#现象：直接下载红外控制程序， 四个马达的PWM占空比虽然一样，但校车也走不了直线。   原因：四个电机的机械属性不一样。    解决方法： 对小车轮子的PWM进行校正，使四个轮子的速度保持一致。


===蓝牙控制实验===
*使用方式： 
#手机安装蓝牙控制程序。
#烧写蓝牙控制程序到小车。
#启动后手机与小车进行蓝牙连接后，使用手机界面控制小车前进、后退、左转、右转。
*原理：小车上通过串口连接有SSP-C蓝牙模块，配置为蓝牙主模式，手机为从模式，连接后即可发送命令，控制小车运动。
*实验现象：
#红外遥控距离：（0~10米控制稳定，11~20M米不稳定，控制成功靠概率）
#现象：有的时候，需要进行手机控制软件重启或小车重启，蓝牙才能连接上，体验非常不好。   原因：1、手机软件蓝牙检测连接逻辑有缺陷（可能）2、小车串口蓝牙模块不稳定（可能）。    解决方法： 对手机蓝牙软件和小车蓝牙模块进行优化，设计时需要进一步讨论。

===超声波测距实验===
*使用方式： 
#使用一块45cm x 45cm 的挡板挡在超声波模块前面，LCD屏上将显示超声波模块到挡板之间的距离。
*原理：超声波模块能测量到发送声波和接收返回声波之间的时间，时间*340米/s=距离。

{| class="wikitable sortable"
|-
! 实际距离(cm)!! 测量距离(cm) !! 误差(cm) !! 备注
|-
|10  ||10||0||
|-
|20  ||20||0||
|-
|28  ||28||0||
|-
|30  ||30||0||
|-
|50  ||49||0||
|-
|100  ||98||0||
|-
|150  ||147||0||
|-
|200  ||196||0||
|-
|250  ||245||0||
|-
|350  ||344||0||
|-
|400  ||394||0||
|-
|450  ||444||0||
|-
|500及以上  ||胡乱数据||0||距离远后，超声波数据无返回，或接收许多干扰数据
|
|}

===红外蔽障实验===
*使用方式： 烧写程序后启动小车，小车将直接进行壁障运动。
*原理：     检查红外发射接收，可以通过电位器设置壁障的距离。

*实验现象：
#蔽障距离非常难控制，电位器在某一位置一个特别微小的变化就能让蔽障距离产生巨大的改变，蔽障距离只能控制在2~5cm。
#红外发射头只能检查到发射头正前方的物体（这个非常糟糕了！），检查玻璃的能力也很弱。如果是迷宫墙，这个程序能够走出去，其它环境则很容易撞墙。

===测速实验===
*使用方式： 烧写程序后，使用红外控制遥控小车运动，LCD屏上将显示左右轮子的速度（cm/s）。
*原理：     500ms内检测光电编码器进行了多少次电平跳变，计算出转角，再乘以轮子直径。

*实验现象：
#小车较匀速地地前进4米，耗时10.75秒（37.21cm/s）, 串口上显示的速度在33-43之间跳变（平均36.3cm/s）。


===黑线寻迹实验===
*使用方式： 
#用黑胶带铺设好赛道。
#烧写程序到小车。
#将小车放到放到赛道上启动。
*原理：车头下面有三路光电发送接收管，浅色瓷砖能反射红外光，深色胶带吸收红外光，也能通过电位器设置检测的灵敏度，小车就能检测到黑线的位置，沿黑线行进。
*实验现象：
#目前公司的黑胶带不能吸收红外发射光，实验无法进行,需要购买合适胶带。（2016/5/24 14:00）




==小车调试心得==
===传感器的灵敏度===
===传感器的位置===
===蓝牙连接的稳定性===
===轮胎的抓地力===




[[USMART 调试]]

[[正点原子战舰stm32f103开发板功能评估]]

[[蓝牙wifi性能评估]]

[[葡萄Paigo需求会议纪要20160526]]

[[葡萄Paigo需求更改20160601]]

[[APC Smart UPS RS232通讯协议说明]]

[[PAIGO PCB board debugging record]]

==Play local audio file==
 FILE='test.mp3'
 gst-launch-1.0 filesrc location="$FILE" ! decodebin ! audioresample ! audio/x-raw, rate=48000 ! autoaudiosink

==Audio broadcast==
Open multicast at address 224.0.0.1 and port 5004:
 gst-launch-1.0 udpsrc address=224.0.0.1 port=5004 caps='application/x-rtp' ! rtpopusdepay ! opusdec ! audioresample ! audio/x-raw, rate=48000 ! autoaudiosink sync=0

Then you can send broadcast from other machine:
 FILE='Portal - Still Alive.MP3'
 gst-launch-1.0 filesrc location="$FILE" ! decodebin ! audioconvert ! audioresample ! opusenc bitrate=96000 ! rtpopuspay ! udpsink host=224.0.0.1 port=5004

===Paigo A1 HW Bug List===
*MB
 #add U1 PIN111/112 for digital MIC;
 #Change U1 PIN64 to PIN63;
 #change U4 PIN Reverse;
 #Del USB HUB
 #change J8 Location
 #change R68,R69 from 40K to 4.87K;
 # DEL U20
 # Del SW1
*Daughter Board
 #Add Control En for U105
 #Change U105 from LDO to DCDC
 #Change L111 U110 from top to bottom
 #Del Bottom VSYS1 Soldmask;
 #change R220 to 100ohm
 #change C221,C222 from 22pF to 18pF
 #Change J102 from 8pin to 6pin;
 #Comb J104/J107 to 5pin;  
 #Comb J105/J109 to 5pin;
 #Del U115
 #comb J119/J120 to 6pin;
*Tracking Board
 # Change J1 Location;
 # Change SW2 PCB Footprint
 # Change R1,R4,R8 to 47K
 # Change SW1/SW3 Location
*Sensor Board
 # change U33 Pastemask;
 # change R35 to 680K;
 # change R34 to 47R;
*LED
 # Change J60,J61 to 50271
 # Change 22-23-R6GHBHC-A01-2C PCB Footprint
 # Del RGB LED
*Charger
 # change J10 PCB Footprint;
 # change R14 from 300R to 1.2K;
 # Change J11 from 8pin to 6pin; 

*open sta wifi
 ifconfig wlan0 up
 wpa_supplicant -Dwext -iwlan0 -c/home/ubuntu/2.conf&
 ifconfig wlan0 192.168.8.156 netmask 255.255.252.0
 route add default gw 192.168.8.5

*测试命令
 发送：01 03 00 00 00 01 84 0a 
 接收：01 03 01 01 31 88


==电池放电曲线对比==
http://lygte-info.dk/review/batteries2012/Common18650comparator.php

==control==
*http://www.inpharmix.com/jps/PID_Controller_For_Lego_Mindstorms_Robots.html
*http://robotics.stackexchange.com/questions/106/what-is-a-suitable-model-for-two-wheeled-robots/134#134
*http://web.cecs.pdx.edu/~mperkows/CLASS_479/S2006/kinematics-mobot.pdf

*http://www-personal.umich.edu/~johannb/Papers/pos96rep.pdf (where am i?)
===path finding===
http://ais.informatik.uni-freiburg.de/teaching/ss10/robotics/slides/16-pathplanning.pdf

==wish list A2==
* add gpio pins to top board - via SD parallel pins 
* backlight control by am335x - already in A1
* top pogo pins (i2c/gpio mux)
* more pogo sensors? temperature, humidity, touch, ultrasonic?
* camera VoIP talking?
* night vision camera?

==CAMERA模组开启MIC测试==
* 相关命令如下：
# arecord -D hw:1 -f S16_LE -r 48000 | aplay -f S16_LE

==Ogg Vorbis convert==
 #Convert all wav file in current directory (need to install vorbis-tools):
 find ./ -name '*.wav' -exec oggenc -q 3 --resample 48000 --downmix {} \;

==display an image using gstreamer==

 /usr/bin/gst-launch-1.0 filesrc location="/usr/share/images/paigo-upgrading.png" ! pngdec ! videoconvert ! fbdevsink device="/dev/fb0" || true &

==play a sound using gstreamer==
 /usr/bin/gst-launch-1.0 filesrc location="/usr/share/sounds/system-upgrading.wav" ! decodebin ! alsasink || true &